from fastapi import FastAPI, File, UploadFile
import ffmpeg
import os
import asyncio

app = FastAPI()

@app.post("/ffmpeg-api/convert_video")
async def convert_video(video: UploadFile = File(...)):
    try:
        # 获取当前工作目录作为临时文件保存的基础路径，你也可以指定其他特定目录
        base_path = os.getcwd()
        # 构建临时文件保存路径，这里使用原文件名，也可按需修改文件名等
        temp_file_path = os.path.join(base_path, "temp", video.filename)
        print('temp_file_path=' + temp_file_path)

        # 获取上传视频文件的临时保存路径，这里将其保存到本地的一个临时文件夹（需确保可写权限）
        input_video_path = os.path.join(base_path, "temp", video.filename)
        print('input_video_path='+input_video_path)

        # 输出视频文件名，修改后缀为.avi表示转换后的格式，可按需更换格式
        output_video_path = os.path.join(base_path, 'temp', os.path.splitext(video.filename)[0] + '.avi')
        print('output_video_path='+output_video_path)

        with open(input_video_path, 'wb') as f:
            f.write(video.file.read())


        # 使用ffmpeg-python进行视频转换
        input_video = ffmpeg.input(input_video_path)
        output_video = ffmpeg.output(input_video, output_video_path)
        await asyncio.sleep(1)  # 模拟可能的异步耗时操作（比如实际复杂的视频处理等待时间）
        ffmpeg.run(output_video)

        print("---------------------process end----------------------")
        return {"message": "视频转换成功"}
    except Exception as e:
        return {"message": f"视频转换失败: {str(e)}"}
    finally:
        print("-------------------------finally----------------------")
        # 无论是否转换成功，删除本地临时文件，避免占用过多磁盘空间
        if os.path.exists(input_video_path):
            os.remove(input_video_path)
        if os.path.exists(output_video_path):
            os.remove(output_video_path)